// entry-server.js
import { createApp } from './app'

export default async (context) => {
  // 因为有可能会是异步路由钩子函数或组件，所以我们将返回一个 Promise，
  // 以便服务器能够等待所有的内容在渲染前，
  // 就已经准备就绪。
  const { app, router, store } = createApp()

  const meta = app.$meta()

  // 设置服务器端 router 的位置
  router.push(context.url)

  context.meta = meta

  // 等到 router 将可能的异步组件和钩子函数解析完
  await new Promise(router.onReady.bind(router))

  let components = router.getMatchedComponents()

  await Promise.all(components.map((c) => c.asyncData && c.asyncData(store)))

  context.state = store.state

  return app
}

// export default async (context) => {
//   // 因为有可能会是异步路由钩子函数或组件，所以我们将返回一个 Promise，
//   // 以便服务器能够等待所有的内容在渲染前，
//   // 就已经准备就绪。
//   const { app, router, store } = createApp()

//   const meta = app.$meta()

//   // 设置服务器端 router 的位置
//   router.push(context.url)

//   context.meta = meta

//   // 等到 router 将可能的异步组件和钩子函数解析完
//   await new Promise(router.onReady.bind(router))

//   context.rendered = () => {
//     // Renderer 会把 context.state 数据对象内联到页面模板中
//     // 最终发送给客户端的页面中会包含一段脚本：window.__INITIAL_STATE__ = context.state
//     // 客户端就要把页面中的 window.__INITIAL_STATE__ 拿出来填充到客户端 store 容器中
//     context.state = store.state
//   }

//   return app
// }
